Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Unix-Shell</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Unix-Shell"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Unix-Shell rootpage-Unix-Shell skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Unix-Shell</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p>Die <b>Unix-Shell</b> oder kurz <b>Shell</b> (<a href="Englische_Sprache" title="Englische Sprache">englisch</a> für <i>Hülle, Schale</i>) bezeichnet die traditionelle <a href="Benutzerschnittstelle" title="Benutzerschnittstelle">Benutzerschnittstelle</a> unter <a href="Unix" title="Unix">Unix</a> oder <a href="Unixoid" class="mw-redirect" title="Unixoid">unixoiden</a> Computer-<a href="Betriebssystem" title="Betriebssystem">Betriebssystemen</a>. Der Benutzer kann in einer Eingabezeile <a href="Unix-Kommandos" class="mw-redirect" title="Unix-Kommandos">Kommandos</a> eintippen, die der Computer dann sogleich ausführt. Man spricht darum auch von einem <a href="Kommandozeileninterpreter" title="Kommandozeileninterpreter">Kommandozeileninterpreter</a>.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> Der Begriff <a href="Shell_(Betriebssystem)" title="Shell (Betriebssystem)">Shell</a> wurde in diesem Zusammenhang 1964/65 von <a href="Louis_Pouzin" title="Louis Pouzin">Louis Pouzin</a> geprägt und dessen Konzepte von <a href="Glenda_Schroeder" title="Glenda Schroeder">Glenda Schroeder</a> für <a href="Multics" title="Multics">Multics</a> implementiert.
</p><p>In der Regel hat der Benutzer unter Unix die Wahl zwischen verschiedenen Shells. Vom Sprachumfang her sind alle üblichen Unix-Shells als vollwertige <a href="Skriptsprache" title="Skriptsprache">Skriptsprachen</a> zur Programmierung und zur Automatisierung von Aufgaben verwendbar; die Abgrenzung zu reinen Skriptsprachen (z.&nbsp;B. <a href="Perl_(Programmiersprache)" title="Perl (Programmiersprache)">Perl</a>, <a href="Awk" title="Awk">awk</a>) besteht darin, dass Shells besondere Mittel für den interaktiven Dialog mit dem Anwender bereitstellen, die vom Ausgeben eines <a href="Prompt" title="Prompt">Prompts</a> im einfachsten Fall bis hin zur Möglichkeit des Editierens der eingegebenen Befehle oder zur Jobsteuerung reichen.
</p><p>Im Gegensatz zu den Kommandozeileninterpretern manch anderer Betriebssysteme (z.&nbsp;B. <a href="Virtual_Memory_System" class="mw-redirect" title="Virtual Memory System">VMS</a>) sind Unix-Shells gewöhnliche Anwenderprogramme ohne besondere Privilegien.
</p>

<div class="mw-heading mw-heading2"><h2 id="Allgemeines">Allgemeines</h2></div>

<p>Nach dem Anmelden ist die Shell das Programm, das vom <code>login</code>-Prozess gestartet wird und Kommandos entgegennimmt. Die Kommandos werden dann ausgeführt. Man unterscheidet zwischen Kommandos, die in der Shell implementiert sind, wie z.&nbsp;B. <code>cd</code>, und Kommandos, die dann im Dateisystem gesucht und gestartet werden.
</p><p>Die meisten gängigen Unix-Shells bieten die folgenden Funktionen:
</p>
<ul><li>Starten von Kommandos</li>
<li>Dateinamen-<a href="Wildcard_(Informatik)" title="Wildcard (Informatik)">Wildcards</a> <i>(globs)</i> als Kommandoargumente</li>
<li>Bedingungen (<code>if</code>, <code>case</code>) und Schleifen (<code>while</code>, <code>for</code>)</li>
<li>interne Kommandos (<code>cd</code>, <code>read</code>)</li>
<li>interne Variablen (<code>$HOME</code>)</li>
<li>Manipulation der <a href="Umgebungsvariable" title="Umgebungsvariable">Umgebungsvariablen</a> für die neuen <a href="Prozess_(Informatik)" title="Prozess (Informatik)">Prozesse</a></li>
<li>Ein-/Ausgabeumlenkung</li>
<li>Starten mehrerer Prozesse, Verkettung über <a href="Pipeline_(Unix)" title="Pipeline (Unix)">Pipes</a></li>
<li>Starten von Prozessen im Hintergrund</li></ul>
<p>Moderne Shells können darüber hinaus:
</p>
<ul><li>Vervollständigung von Kommandos, Dateinamen und Variablen <i>(completion system)</i></li>
<li>Editieren der Kommandozeile <i>(command line editing)</i></li>
<li>Wiederholung und Editieren früherer Kommandos <i>(command history)</i></li>
<li>Stoppen und erneutes Starten von Prozessen <i>(job control)</i></li>
<li>Verschieben von Prozessen aus dem Vordergrund in den Hintergrund und umgekehrt <i>(job control)</i></li>
<li>Eingebautes Kommando zur Durchführung von Berechnungen (<code>$((2+2))</code>)</li>
<li>Eingebautes Kommando zum Testen von Dateieigenschaften (<code>test</code>)</li></ul>
<p>Hinsichtlich des Abbruchs eines Kommandos machen sich die Shells die Eigenschaften des zugrundeliegenden Terminal-Gerätetreibers zunutze. Die Shell wartet normalerweise auf das Ende eines Kommandos. <kbd style="background: #E0FFFF; color: #202122; background-image:linear-gradient(rgba(255,255,255,.4),rgba(127,127,127,.2)); border-color:#DDDDDD #AAAAAA #888888 #CCCCCC; border-radius:2px; border-style:solid; border-width:1px; font-family:inherit; padding:0 .4em; text-shadow:0 1px rgba(255,255,255,.2); white-space:nowrap;"><a href="Steuerungstaste" title="Steuerungstaste">Strg</a></kbd>+<kbd style="background: #F7F7F7; color: #202122; background-image:linear-gradient(rgba(255,255,255,.4),rgba(127,127,127,.2)); border-color:#DDDDDD #AAAAAA #888888 #CCCCCC; border-radius:2px; border-style:solid; border-width:1px; padding:0 .4em; text-shadow:0 1px rgba(255,255,255,.2); white-space:nowrap;">C</kbd> bewirkt unter Unix einen Kommandoabbruch, den der Gerätetreiber auslöst.
</p>
<div class="mw-heading mw-heading3"><h3 id="Unix-Werkzeuge">Unix-Werkzeuge</h3></div>
<p>Unix-Shells machen sich die Eigenschaften des zugrundeliegenden Betriebssystems zunutze. Sie implementieren nur das Nötigste. Externe <a href="Unix-Kommandos" class="mw-redirect" title="Unix-Kommandos">Unix-Kommandos</a> ergänzen über die leistungsfähige Ein-/Ausgabe und Pipeimplementierung alles Weitere. Unix enthält z.&nbsp;B. spezielle Kommandos für die Textdateimanipulation wie Suchen, Editieren, Ersetzen, Wörter zählen, Zeichenübersetzung, Abschneiden von Zeilen usw.
</p>
<div class="mw-heading mw-heading3"><h3 id="Skripte">Skripte</h3></div>
<p><a href="Shellskript" title="Shellskript">Shellskripte</a> sind Text-Dateien und stellen kleine Programme dar. Sie werden vom Anwender geschrieben und beim Aufruf von der Shell gelesen und ausgeführt. Muss man z.&nbsp;B. immer wieder in seinem Arbeitsalltag fünf Befehle nacheinander in die Shell eintippen, kann man sich das Leben vereinfachen, indem man diese Befehle in einem Skript sammelt und dann nur noch das ganze Skript aufruft. Die Shell liest das Skript aus und führt die Befehle entsprechend aus. Zu beachten ist, dass man alle Befehle, die man „händisch“ in die Shell eingibt, auch über ein Skript ausführen kann und umgekehrt.
</p><p>Ein Skript, das von eins bis hundert zählt, kann wie folgt aussehen:
</p>
<div class="mw-highlight mw-highlight-lang-bash mw-content-ltr" dir="ltr"><pre><span></span><span class="ch">#!/bin/sh</span>
<span class="nv">I</span><span class="o">=</span><span class="m">1</span><span class="w"> </span><span class="c1"># Variable I auf 1 setzen</span>
<span class="k">while</span><span class="w"> </span><span class="nb">test</span><span class="w"> </span><span class="nv">$I</span><span class="w"> </span>-le<span class="w"> </span><span class="m">100</span><span class="w"> </span><span class="c1"># While-Schleife, externes Kommando test I&lt;=100</span>
<span class="k">do</span>
<span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="nv">$I</span><span class="w"> </span><span class="c1"># externes Kommando echo, gibt I aus</span>
<span class="w"> </span><span class="nv">I</span><span class="o">=</span><span class="k">$(</span>expr<span class="w"> </span><span class="nv">$I</span><span class="w"> </span>+<span class="w"> </span><span class="m">1</span><span class="k">)</span><span class="w"> </span><span class="c1"># externes Kommando expr, Zuweisung der Ausgabe von expr an I</span>
<span class="k">done</span>
</pre></div>
<p>Direkt in der Shell eingegeben, sähe dies folgendermaßen aus:
</p>
<div class="mw-highlight mw-highlight-lang-bash mw-content-ltr" dir="ltr"><pre><span></span><span class="nv">I</span><span class="o">=</span><span class="m">1</span><span class="p">;</span><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="nb">test</span><span class="w"> </span><span class="nv">$I</span><span class="w"> </span>-le<span class="w"> </span><span class="m">100</span><span class="p">;</span><span class="w"> </span><span class="k">do</span><span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="nv">$I</span><span class="p">;</span><span class="w"> </span><span class="nv">I</span><span class="o">=</span><span class="k">$(</span>expr<span class="w"> </span><span class="nv">$I</span><span class="w"> </span>+<span class="w"> </span><span class="m">1</span><span class="k">)</span><span class="p">;</span><span class="w"> </span><span class="k">done</span>
</pre></div>
<p>Bei späteren Versionen der Bourne-Shell und bei moderneren Shells sind die Kommandos <code>test</code> und <code>echo</code> intern, da sie sehr häufig benötigt werden und die Shell auch nicht mehr, wie bei sehr frühen Systemen, klein gehalten werden muss.
</p><p>Der Text eines Skripts kann in eine Datei geschrieben und mit dem Kommando <code>chmod +x</code> ausführbar gemacht werden. Es verhält sich dann wie jedes andere Kommando, allerdings ist der Start von privilegierten Skripten oft eingeschränkt.
</p><p>Beginnt eine ausführbare Unix-Datei mit der Zeichenfolge <code>#!</code> (<a href="Shebang" title="Shebang">Shebang</a>), werten viele Betriebssysteme die darauf folgenden Zeichen bis zum Zeilenende als Angabe, welches Programm gestartet werden soll, um diese Datei als Skript auszuführen. So kann man unabhängig davon, welche Shell der Aufrufer eines Skripts interaktiv verwendet, sicherstellen, dass das Skript mit der gewünschten Shell ausgeführt wird. Diese Zeichenfolge ist jedoch nicht Bestandteil des <a href="Portable_Operating_System_Interface" class="mw-redirect" title="Portable Operating System Interface">POSIX</a>-Standards.
</p>
<div class="mw-heading mw-heading3"><h3 id="Systemstart">Systemstart</h3></div>
<p>Beim Hochfahren des Unix-Systems werden auch <a href="Shellskript" title="Shellskript">Shellskripte</a> eingesetzt. Die BSD-Varianten starten dazu einfach das Skript <code>/etc/rc</code>, das dann alle Systeminitialisierungen wie Dateisystemüberprüfung, Hintergrundprozesse usw. durchführt. System-V-Unix-Varianten verwenden <code>sysinit</code>, das aus mehreren Shell-Skripten besteht. Unter <a href="Linux" title="Linux">Linux</a> ist <a href="Systemd" title="Systemd">systemd</a> verbreitet, welches die Skripte durch deklarative Konfigurationsdateien ersetzt hat.
</p>
<div class="mw-heading mw-heading3"><h3 id="Kommandos,_die_eigentlich_Shell-Skripte_sind"><span id="Kommandos.2C_die_eigentlich_Shell-Skripte_sind"></span>Kommandos, die eigentlich Shell-Skripte sind</h3></div>
<p>Skripte sind von normalen Programmen in der Anwendung nicht zu unterscheiden. Manche Unix-Versionen liefern sogar einige Kommandos mit, die als Shell-Skripte realisiert sind. Insbesondere Kommandos wie <code>man</code> (Online-Manual) und <code>cc</code> (Aufruf von C-Compiler, Assembler und Linker) sind bei vielen Unix-Varianten Shell-Skripte.
</p>
<div class="mw-heading mw-heading2"><h2 id="Die_frühen_Shells"><span id="Die_fr.C3.BChen_Shells"></span>Die frühen Shells</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Die_Thompson-Shell">Die Thompson-Shell</h3></div>
<p>Die <a href="Thompson-Shell" title="Thompson-Shell">Thompson-Shell</a> war die erste, originale Unix-Shell und war zwischen 1971 und 1979 die Standard-Shell des UNIX-Systems von AT&amp;T. Die heute allgemeine Syntax für die Umleitung von Ein- und Ausgabeströmen stammt aus dieser Shell. Das <a href="Pipe_(Informatik)" title="Pipe (Informatik)">pipe</a>-Konzept wurde 1973 zuerst in der Thompson-Shell realisiert. Im Gegensatz zu jüngeren Shells war die Thompson-Shell keine Programmiersprache. Mit einem externen <code>if</code>- und <code>goto</code>-Kommando war jedoch eine Steuerung von Programmabläufen möglich. Die Thompson-Shell wurde 1979 als Standard-Shell durch die Bourne-Shell ersetzt.
</p><p>Eine Reimplementierung der originalen UNIX-V6-Shell für moderne Unix-artige Systeme ist <samp>osh</samp> (für <i><span lang="en">old shell</span></i>) bzw. dessen Nachfolger <samp>etsh</samp> (für <i><span lang="en">enhanced Thompson shell</span></i>).
</p>
<div class="mw-heading mw-heading3"><h3 id="Die_Bourne-Shell">Die Bourne-Shell</h3></div>
<div class="mw-heading mw-heading4"><h4 id="Geschichte">Geschichte</h4></div>
<p>Der Vorfahre der meisten heutigen Shells ist die Bourne-Shell <b>(sh)</b> von <a href="Stephen_R._Bourne" title="Stephen R. Bourne">Stephen R. Bourne</a>, die 1977/1978 zusammen mit <a href="Unix" title="Unix">Unix</a> V7 erschien. Auf fast allen kommerziellen Unix-Varianten findet sich bis heute noch eine spätere Version der Bourne-Shell, auch wenn sie als Systemshell (<code>/bin/sh</code>) zunehmend durch andere Shells ersetzt wird. Diese Shell hat auf Version 7 bereits alle wesentlichen Eigenschaften wie Ein-/Ausgabeumlenkung, <a href="Pipe_(Informatik)" title="Pipe (Informatik)">Pipes</a>, Hintergrundprozesse und Kontrollstrukturen. Bezüglich der Kommandozeileneditierung verlässt sich die Shell auf den Terminaltreiber, der nur das Löschen der ganzen Zeile (CTRL-U) und des letzten Zeichens (DEL) erlaubt.
</p><p>Im Lauf der Zeit wurde die ursprüngliche Version erweitert und verändert. Da die Bourne-Shell nie eine sichtbare Versionierung erfuhr, ist die jeweilige Variante nur durch Testen der vorhandenen Eigenschaften herauszufinden. Die Bezeichnung ergibt sich dann mit der Variante des AT&amp;T Unix, mit dem sie ausgeliefert wurde (V7, System III, System V Release 1 – kurz SVR1, SVR2, -3, -4, -4.2).
</p><p>Die Bourne-Shell-Syntax ist Grundlage der meisten modernen Unix-Shells, die im Wesentlichen eine Erweiterung dieser Shell darstellen. Skripte für die Bourne-Shell sind praktisch ohne Änderung auch auf diesen Shells lauffähig. Die Skriptfähigkeiten der Bourne-Shell waren richtungsweisend, und sh ist bis heute eine der beliebtesten Skriptsprachen für Unix. Aus diesem Grund und zwecks Rückwärtskompatibilität liegt generell eine Bourne-kompatible Shell als <span style="font-family:monospace;">/bin/sh</span> vor.
</p><p>Seit die OpenSolaris/SVR4-Variante der Bourne-Shell von Sun als <a href="Open_Source" title="Open Source">Open Source</a> veröffentlicht wurde, ist diese Shell dank eines Umbaus der Speicherverwaltung von <code>sbrk(2)</code> auf <code>malloc(3)</code> durch <a href="J%C3%B6rg_Schilling" title="Jörg Schilling">Jörg Schilling</a> mittlerweile für nahezu alle Plattformen verfügbar. Ein Derivat der Bourne-Shell („POSIX-Shell“) ist die Standardshell für neue Benutzerkonten in <a href="FreeBSD" title="FreeBSD">FreeBSD</a>.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading4"><h4 id="Beispielprogramm">Beispielprogramm</h4></div>
<p>Obwohl der Funktionsumfang der Bourne-Shell verhältnismäßig gering ist, können mit Hilfe der Standard-Unix-Programme alle für Kommandozeileninterpreter typischen Aufgaben übernommen werden. Die Syntax der Bourne-Shell ist etwas eigenwillig. Beispiel:
</p>
<div class="mw-highlight mw-highlight-lang-bash mw-content-ltr" dir="ltr"><pre><span></span><span class="ch">#!/bin/sh</span>
<span class="nv">tageszeit</span><span class="o">=</span><span class="sb">`</span>date<span class="w"> </span>+%H<span class="sb">`</span>
<span class="k">if</span><span class="w"> </span><span class="o">[</span><span class="w"> </span><span class="nv">$tageszeit</span><span class="w"> </span>-lt<span class="w"> </span><span class="m">12</span><span class="w"> </span><span class="o">]</span><span class="p">;</span><span class="w"> </span><span class="k">then</span>
<span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s2">"Guten Morgen."</span>
<span class="k">else</span>
<span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s2">"Guten Tag."</span>
<span class="k">fi</span>
</pre></div>
<p>In der ersten Version der Bourne-Shell wurde bereits ein Mechanismus implementiert, der das Kriterium z.&nbsp;B. für eine erweiterte Fallunterscheidung (case) auswerten konnte. Die Shell konnte darüber hinaus nur eine <a href="Boolescher_Operator" title="Boolescher Operator">boolesche</a> Auswertung durchführen. Weitere Kriterien wurden durch externe Programme ermittelt. In neueren Bourne-Shells und ihren freien Abkömmlingen (s.&nbsp;u.) ist <code>test</code> implementiert und wird, wie alle eingebauten Befehle, bei Vorhandensein an Stelle von externen Programmen verwendet. In dem Beispiel wird das eingebaute <code>[</code> aufgerufen, welches, abgesehen davon, dass ihm zuletzt ein <code>]</code> übergeben werden muss, identisch zu <code>test</code> ist. Die eckigen Klammern sind dadurch eine andere Schreibweise für <code>if test $tageszeit -lt 12</code> mit den <a href="Argument" title="Argument">Argumenten</a> <i>aktuelle Stunde</i> (gespeichert in <code>$tageszeit</code>), <code>-lt</code> (<i>less than</i> – kleiner als), <code>12</code>. Gibt das Programm <code>test</code> den Status 0 (d.&nbsp;h. „wahr“) zurück, so wird alles zur Anweisung <code>then</code> gehörende ausgeführt. Gibt <code>test</code> den Status 1 (d.&nbsp;h. „falsch“) zurück, so wird alles zur Anweisung <code>else</code> gehörende ausgeführt. Da anschließend an die jeweiligen Schlüsselwörter eine Liste von Anweisungen folgen kann, wird mit der Anweisung <code>fi</code> (d.&nbsp;i. ein umgedrehtes <code>if</code>) die durch das Schlüsselwort <code>if</code> eingeleitete Fallunterscheidung beendet.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Die_C-Shell">Die C-Shell</h3></div>
<p><a href="Bill_Joy" title="Bill Joy">Bill Joy</a> entwickelte in Berkeley für die zweite <a href="Berkeley_Software_Distribution" title="Berkeley Software Distribution">BSD</a>-Distribution (2BSD) von 1979 eine Shell, die sich mehr an der <a href="C_(Programmiersprache)" title="C (Programmiersprache)">C</a>-Syntax orientierte, die C-Shell <b>(csh).</b> Diese Shell erlaubt bereits eine Kommandozeileneditierung, allerdings nicht interaktiv, sondern über eine spezielle Syntax. Sie ermöglicht auch das Wiederholen (und Editieren) alter Kommandos. Außerdem wird erstmals die Job-Control-Möglichkeit implementiert: Über CTRL-Z lässt sich ein Kommando stoppen und später über die internen Kommandos <code>fg</code> (Foreground = Vordergrund) bzw. <code>bg</code> (Background = Hintergrund) fortsetzen.
</p><p>Die C-Shell besitzt viele bekannte Features, die später durch bash übernommen wurden, wie z.&nbsp;B. <a href="Alias_(Unix)" title="Alias (Unix)">Aliase</a> oder eine <i>History</i>. Heutzutage wird die C-Shell nur noch wenig benutzt; sie wurde von anderen <a href="Kommandozeileninterpreter" title="Kommandozeileninterpreter">Shells</a> wie der <i>tcsh,</i> der <i>ksh</i> (Korn-Shell), der <i>bash</i> (Bourne again Shell) oder der <i><a href="Z_shell" title="Z shell">zsh</a></i> abgelöst. Mit der <a href="Hamilton_C_shell" title="Hamilton C shell">Hamilton C shell</a> gibt es eine native Implementierung der C-Shell für <a href="Microsoft_Windows_NT" title="Microsoft Windows NT">Windows&nbsp;NT</a> und früher <a href="OS/2" title="OS/2">OS/2</a>.
</p><p>Die Skriptfähigkeiten der C-Shell sind durch diverse Unzulänglichkeiten etwas eingeschränkt, z.&nbsp;B. kann die Fehlerausgabe nicht unabhängig von der Standardausgabe umgelenkt werden. Ein Anwender, der für die interaktive Eingabe die C-Shell verwendet, kann durch ein vorangestelltes <code>#!/bin/sh</code> in seinen Skripten das Betriebssystem veranlassen, die Standard-Shell (diese ist mindestens kompatibel zur Bourne-Shell, auf modernen Systemen auch meist <a href="Portable_Operating_System_Interface" class="mw-redirect" title="Portable Operating System Interface">POSIX</a>-konform) zu verwenden. Dies ist auch für alle anderen Shells möglich.
</p>
<div class="mw-heading mw-heading2"><h2 id="Weiterentwicklungen">Weiterentwicklungen</h2></div>
<p>Auf jedem Unix-System befindet sich eine zu der Bourne-Shell kompatible Shell in <i>/bin/sh</i>. Die Verfügbarkeit weiterer Shells hängt von der jeweiligen Unix-Variante ab, eine C-Shell-Version findet sich oft in <i>/bin/csh</i>. Wegen der unterschiedlichen Syntax unterscheidet man Bourne-Shell- und C-Shell-Abkömmlinge. Da praktisch alle modernen Shells in der <a href="Programmiersprache" title="Programmiersprache">Programmiersprache</a> <a href="C_(Programmiersprache)" title="C (Programmiersprache)">C</a> geschrieben sind, lassen sich fehlende Shells leicht nachrüsten. Auch auf fremden Betriebssystemen kann man oft eine Unix-Shell, zumindest als Fremdsoftware, finden.
</p>
<div class="mw-heading mw-heading3"><h3 id="Die_Job-Control-Shell">Die Job-Control-Shell</h3></div>
<p>Die Job-Control-Shell ist eine Bourne-Shell (genauer die SVR4-Variante, also erstmals erschienen auf dem AT&amp;T-Unix „System V Release 4“), die um Job-Control-Eigenschaften (wie sie mit der C-Shell bekannt wurden) erweitert ist. Häufig handelt es sich sogar um dasselbe Programm, welches die zusätzlichen Eigenschaften (z.&nbsp;B. die Kommandos <code>bg</code>, <code>fg</code>, <code>jobs</code>, <code>kill</code>, <code>stop</code>, <code>suspend</code>, <code>wait</code>) nur aktiviert, wenn es unter dem Namen <b>jsh</b> statt sh aufgerufen wird.
</p>
<div class="mw-heading mw-heading3"><h3 id="Die_Kornshell">Die Kornshell</h3></div>
<div class="hauptartikel" role="navigation"><span class="hauptartikel-pfeil" title="siehe" aria-hidden="true" role="presentation">→&nbsp;</span><i><span class="hauptartikel-text">Hauptartikel</span>: <a href="Kornshell" title="Kornshell">Kornshell</a></i></div>
<p>David Korn entwickelte für Unix <a href="System_V" title="System V">System V</a> von <a href="AT%26T" title="AT&amp;T">AT&amp;T</a> die Kornshell <b>(ksh).</b> Diese orientiert sich an der Bourne-Shell, übernimmt aber auch die Neuerungen der C-Shell wie <a href="Job_control" title="Job control">Job control</a>, eine weiter verbesserte Kommandozeileneditierung. Es existiert eine Version von 1988 <i>(ksh88)</i> und eine neuere von 1993 <i>(ksh93).</i> Die <i>ksh88</i> ist Grundlage des <a href="Portable_Operating_System_Interface" class="mw-redirect" title="Portable Operating System Interface">POSIX</a>-Standards, die neueren Erweiterungen <code>select</code>, <code>function</code> und <code>[[</code> gegenüber der Bourne-Shell sind aber ausdrücklich als undefiniert gekennzeichnet.<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> Die Korn-Shell war als Teil von Unix System V lange Zeit nur kommerziell erhältlich. Seit dem 1. März 2000 ist der Quelltext von <i>ksh93</i> frei verfügbar. Viele kommerzielle Unix-Systeme verwenden die <i>ksh</i> als Standard-Shell <i>(/bin/sh).</i>
</p><p>Die <b>dtksh</b> („Desktop Korn Shell“) stellt eine Korn-Shell mit zusätzlichen Kommandos für die Programmierung von Benutzeroberflächen unter <a href="X_Window_System" title="X Window System">X11</a>/<a href="Motif" title="Motif">Motif</a> dar.
</p>
<div class="mw-heading mw-heading3"><h3 id="Die_Public-Domain-Korn-Shell">Die Public-Domain-Korn-Shell</h3></div>
<p>Die Public-Domain-Korn-Shell <b>(pdksh)</b> ist eine freie und nicht vollständig kompatible Kopie der AT&amp;T-Korn-Shell. Viele Funktionen von <i>ksh88</i> und wenige von <i>ksh93</i> sind in ihr enthalten. Das <a href="OpenBSD" title="OpenBSD">OpenBSD</a>-Projekt verwendet eine Ableitung der <i>pdksh</i> als Standard-Shell <i>(/bin/sh).</i>
</p><p>Die MirBSD Korn Shell <b>(mksh)</b> basiert auf OpenBSDs Version der <i>pdksh (oksh),</i> enthält jedoch Fehlerbeseitigungen und Funktionen von anderen Shells.
</p>
<div class="mw-heading mw-heading3"><h3 id="Die_Bourne-Again-Shell">Die Bourne-Again-Shell</h3></div>
<div class="hauptartikel" role="navigation"><span class="hauptartikel-pfeil" title="siehe" aria-hidden="true" role="presentation">→&nbsp;</span><i><span class="hauptartikel-text">Hauptartikel</span>: <a href="Bash_(Shell)" title="Bash (Shell)">Bash (Shell)</a></i></div>
<p>Die <b>B</b>ourne-<b>a</b>gain-<b>sh</b>ell (bash)<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> ist Teil des <a href="GNU-Projekt" title="GNU-Projekt">GNU-Projekts</a>. Ihr Name ist ein absichtlich mehrdeutiges Wortspiel und kann sowohl als „wiedergeborene <i>(born again)</i> Shell“ als auch als „wieder einmal (eine) Bourne-Shell“ interpretiert werden. Weitere Interpretationen sind abgeleitet aus dem englischen <i>bash</i> („die Feier“, „die Party“, „der Schlag“) und <i>to bash</i> („schlagen“, „kritisieren“, „schlecht machen“). Geschrieben wurde die Bash größtenteils von <a href="Brian_Fox" title="Brian Fox">Brian Fox</a> und Chet Ramey Ende der 1980er Jahre.
</p><p>Die Bash ist größtenteils kompatibel zur originalen Bourne-Shell (sh), im Funktionsumfang jedoch erheblich erweitert. Vor allem beherrscht sie einen Großteil der Fähigkeiten der ksh und versteht auch Teile der Syntax der csh wie zum Beispiel die Command-History, den Directory-Stack, die <code>$RANDOM</code>-Variable und die <a href="Portable_Operating_System_Interface" class="mw-redirect" title="Portable Operating System Interface">POSIX</a>-Form der Command-Substitution <code>$(…)</code>. Daneben sind auch eine ganze Reihe eigene Erweiterungen implementiert.
</p><p>Die Bash <i>(/bin/bash)</i> ist die Standard-Shell sowohl auf den meisten <a href="Linux" title="Linux">Linux</a>-Systemen als auch unter einigen Versionen von <a href="MacOS" title="MacOS">macOS</a> und wurde auf fast alle Unix-Systeme portiert.
</p><p>Für Windows existieren zahlreiche Portierungen. Die bekanntesten sind:
</p>
<ul><li><a href="Cygwin" title="Cygwin">Cygwin</a></li>
<li>MSYS (Minimal SYStem), eine Komponente von <a href="MinGW" title="MinGW">MinGW</a></li>
<li><a href="Microsoft_Windows_Services_for_UNIX" title="Microsoft Windows Services for UNIX">Microsoft Windows Services for UNIX</a></li>
<li><a href="Windows-Subsystem_f%C3%BCr_Linux" title="Windows-Subsystem für Linux">Windows-Subsystem für Linux</a></li></ul>
<div class="mw-heading mw-heading3"><h3 id="Die_TENEX-C-Shell">Die TENEX-C-Shell</h3></div>
<p>Die TENEX-C-Shell <b>(tcsh)</b> stellt eine Erweiterung der C-Shell (csh) von Christos Zoulas dar. Sie enthält Verbesserungen der Kommandozeileneditierung und andere Erweiterungen wie einer (programmierbaren) Dateinamen-Vervollständigung, der Möglichkeit des Editierens von Dateien direkt in der Kommandozeile, und einigen anderen Dingen. Sie ist aber sonst vollständig kompatibel zur C-Shell.
</p><p>Das 't’ in tcsh stammt aus dem 'T' in <a href="TENEX" class="mw-redirect" title="TENEX">TENEX</a> ab, einem <a href="Betriebssystem" title="Betriebssystem">Betriebssystem</a>, von dem sich der Autor der tcsh hat inspirieren lassen. Die tcsh ersetzt die csh auf vielen Linux-Systemen, BSD-Systemen und älteren Versionen von macOS.
</p>
<div class="mw-heading mw-heading3"><h3 id="Die_Z-Shell">Die Z-Shell</h3></div>
<div class="hauptartikel" role="navigation"><span class="hauptartikel-pfeil" title="siehe" aria-hidden="true" role="presentation">→&nbsp;</span><i><span class="hauptartikel-text">Hauptartikel</span>: <a href="Z_shell" title="Z shell">Z shell</a></i></div>
<p>Die Z-Shell (Z shell, zsh) ist eine Shell mit sehr vielen Möglichkeiten. Sie ähnelt sehr der KornShell und übernimmt auch Funktionen der Bourne-Again-Shell und der TENEX-C-Shell. Sie geht aber in vieler Hinsicht eigene Wege und gilt als eine der leistungsfähigsten Unix-Shells. Sie kann als Loginshell, als interaktive Shell und als <a href="Interpreter" title="Interpreter">Interpreter</a> für Shell-Skripte verwendet werden.
</p><p>Die Z-Shell kann als Quintessenz aller Verbesserungen und Features der <i>bash,</i> der <i>csh</i> und der <i>tcsh</i> betrachtet werden.
</p><p>Zu einigen ihrer Features zählen:
</p>
<ul><li>eine frei programmierbare Wortvervollständigung (TAB-Completion)</li>
<li>die Möglichkeit, die Historie anderer – gleichzeitig laufender – Z-Shell-Sitzungen zu nutzen</li>
<li>Rechtschreibüberprüfung</li>
<li>nahezu vollständige Kompatibilität zur <a href="Bash_(Shell)" title="Bash (Shell)">Bash</a>, <a href="Kornshell" title="Kornshell">Kornshell</a> und <a href="Tcsh" class="mw-redirect" title="Tcsh">TENEX C-Shell</a></li>
<li>starke Veränderbarkeit des <a href="Prompt" title="Prompt">Prompts</a> durch Themes, u.&nbsp;a. die Möglichkeit, den Prompt auf die rechte Seite des Terminals zu setzen</li>
<li>erweiterte <a href="Wildcard_(Informatik)" title="Wildcard (Informatik)">Globbing</a>-Funktionalitäten</li></ul>
<p>Die Z-Shell wurde von Paul Falstad entwickelt und 1990 im <a href="Usenet" title="Usenet">Usenet</a> veröffentlicht. Sie ist benannt nach dem <a href="Login_(Informationstechnik)" title="Login (Informationstechnik)">Login</a>-Namen <i>zsh</i> eines seiner Mitarbeiter.
</p><p>Die Z-Shell ist unter einer <a href="BSD-Lizenz" title="BSD-Lizenz">BSD-Lizenz</a> lizenziert. Dies ist der Grund, warum bei macOS Catalina 10.15 die Bash durch die Z-Shell als Standardshell ersetzt wurde.
</p>
<div class="mw-heading mw-heading3"><h3 id="Die_Almquist-Shell">Die Almquist-Shell</h3></div>
<p>Die <i><b>Almquist-Shell (ash)</b></i> von Kenneth Almquist ist eine Neuimplementierung der SVR4-Variante der Bourne-Shell. Sie wurde ursprünglich für die traditionellen BSD-Varianten von Unix geschrieben, nachdem die Bourne-Shell selbst nur noch mit Lizenzierung zu erhalten war. Spätere Varianten orientieren sich am <a href="Portable_Operating_System_Interface" class="mw-redirect" title="Portable Operating System Interface">POSIX</a>-Standard und eignen sich sehr gut zur Ausführung von Skripten. Die <a href="FreeBSD" title="FreeBSD">FreeBSD</a>- und <a href="NetBSD" title="NetBSD">NetBSD</a>-Projekte verwenden weiterentwickelte Versionen der <b>ash</b> als Standard-Shell <i>(/bin/sh)</i>. Da die <b>ash</b> im Vergleich zu anderen modernen Shells sehr geringe Ansprüche an Speichergröße und Rechnergeschwindigkeit stellt, wird sie auch gerne in <a href="Embedded_Linux" title="Embedded Linux">Embedded-Linux-Systemen</a> verwendet; sie wurde auch in das ebenfalls in diesem Bereich verbreitete Multifunktions-Programm <a href="BusyBox" title="BusyBox">BusyBox</a> integriert.
</p>
<div class="mw-heading mw-heading4"><h4 id="Die_Debian-Almquist-Shell">Die Debian-Almquist-Shell</h4></div>
<p>Die <i><b>Debian-Almquist-Shell (dash),</b></i> Bourne-kompatibel und POSIX-konform, ist ein direkter Abkömmling der <i>Almquist-Shell</i>. Sie wurde 1997 durch Herbert Xu portiert und 2002 in <b>dash</b> umbenannt. Die dash ist ein moderner Ersatz für die ash im <a href="Debian" title="Debian">Debian</a>-Projekt, wo sie als <i><span style="font-family:monospace;">/bin/sh</span></i> eingerichtet ist, da sie gegenüber der im interaktiven Gebrauch bevorzugten Bash in Geschwindigkeit, Robustheit und Anzahl der Abhängigkeiten Vorteile bietet. Aus demselben Grund ist dash die Vorgabe-<i><span style="font-family:monospace;">/bin/sh</span></i> bei <a href="Ubuntu_(Betriebssystem)" title="Ubuntu (Betriebssystem)">Ubuntu</a> seit Ausgabe 6.10.
</p>
<div class="mw-heading mw-heading3"><h3 id="Weitere_Shells">Weitere Shells</h3></div>
<ul><li>Neben einer Neuimplementierung der letzten <a href="Thompson-Shell" title="Thompson-Shell">Thompson-Shell</a> (<samp>etsh</samp> für <i><span lang="en">enhanced Thompson shell</span></i>, vormals <samp>osh</samp> alias <i><span lang="en">old shell</span></i>), die unter Unix vor Einführung der Bourne-Shell in Gebrauch war, existiert eine Unix-Implementierung (Byron Rakitzis) des im Vergleich zur Bourne-Shell <a href="Syntax" title="Syntax">syntaktisch</a> klareren <a href="Plan_9_(Betriebssystem)" title="Plan 9 (Betriebssystem)">Plan-9</a>-Kommandointerpreters <b>rc</b> <i>(run command)</i> von Tom Duff sowie die an die Syntax der <b>rc</b> anschließende, <a href="Semantik" title="Semantik">semantisch</a> manipulierbare bzw. erweiterbare <b>es</b> <i>(extensible shell)</i> von Paul Haahr und Byron Rakitzis, in die Ideen der <a href="Funktionale_Programmierung" title="Funktionale Programmierung">funktionalen Programmierung</a> einflossen.</li>
<li>Eine Shell, bei der der interaktive Aspekt zunächst bewusst zugunsten der Shell-Programmierung vernachlässigt wird, ist die Scheme-Shell <b>(scsh)</b> von Olin Shivers, mit der für das Shell-Scripting eine genuine Programmiersprache (<a href="Scheme" title="Scheme">Scheme</a>) zur Verfügung steht.</li>
<li>Eine syntaktisch an der Programmiersprache <a href="Lisp" title="Lisp">Lisp</a> orientierte Shell ist <b>esh</b> <i>(easy shell)</i> von Ivan Tkatchev.</li>
<li>Vor allem an interaktive Nutzerfreundlichkeit orientiert ist Axel Liljencrantz’ <a href="Fish_(Shell)" title="Fish (Shell)">fish</a> <i>(friendly interactive shell).</i></li>
<li>Von Gunnar Ritter stammt eine <a href="Portierung_(Software)" title="Portierung (Software)">Portierung</a> der <a href="OpenSolaris" title="OpenSolaris">OpenSolaris</a>-Bourne-Shell nach Linux, Solaris, Free- und NetBSD, die unter dem Namen <b>Heirloom Bourne Shell</b> firmiert.</li>
<li>Einige Mitarbeiter von <a href="Red_Hat" title="Red Hat">Red Hat</a> haben die <b>nash</b> entwickelt, die von sich behauptet, keine Shell zu sein („not a shell“), sondern „nur“ ein <a href="Interpreter" title="Interpreter">Befehlsinterpreter</a>, der „linuxrc“-Images interpretieren soll.<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> Sie scheint vor allem im Umfeld von Red Hat und <a href="Mandriva_Linux" title="Mandriva Linux">Mandriva</a> eingesetzt zu werden. Sie ist dort Teil des <span style="font-family:monospace;">mkinitrd</span>-Pakets.</li>
<li>Die <b>sash</b> (Stand-alone shell) ist darauf getrimmt, dass möglichst viele externe Kommandos durch die internen Funktionen der Shell ersetzt werden. Dadurch ist das System auch dann bedienbar, wenn wesentliche externe Programme fehlen.</li>
<li>Die Perl-Shells <i>psh</i> und <i>psh2</i> sind in der Lage, <a href="Perl_(Programmiersprache)" title="Perl (Programmiersprache)">Perl</a>-Kommandos zu verarbeiten, beispielsweise um <a href="Pipe_(Informatik)" title="Pipe (Informatik)">Pipes</a> effizient zu manipulieren.<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup></li>
<li>Das Programm <a href="IPython" title="IPython">IPython</a> stellt eine interaktive Shell auf Basis der <a href="Python_(Programmiersprache)" title="Python (Programmiersprache)">Programmiersprache Python</a> zur Verfügung.<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Kompatibilität_und_Portabilität"><span id="Kompatibilit.C3.A4t_und_Portabilit.C3.A4t"></span>Kompatibilität und Portabilität</h2></div>
<p>Je nach Abstammung der Shell sind für sie geschriebene Skripte nicht oder nur bedingt kompatibel zu anderen Shells. Zum Beispiel lassen sich Bourne-Shell-Skripte nicht unter der C-Shell ausführen, aber es besteht eine gewisse Chance, dass ein solches Skript unter einer Korn-Shell oder Job-Control-Shell läuft. Neben diesem offensichtlichen Problem besteht aber auch das Problem, dass unterschiedliche Implementierungen der gleichen Shell existieren und dass Shells unter Beibehaltung ihres Namens im Laufe der Zeit auch weiterentwickelt wurden und werden. Die gleichen (gleich benannten) Shells auf unterschiedlichen Unix-Varianten weisen unterschiedliche Entwicklungsstände und somit sowohl unterschiedliche Eigenschaften als auch Fehler auf. Hinzu kommt, dass Shell-Skripte, wie bereits beschrieben, viele normale Unix-Kommandos aufrufen. Auch diese unterscheiden sich in ihrem Verhalten zum Teil von Unix zu Unix. Dadurch kann sich das Verhalten eines Shell-Skripts ebenfalls ändern, wenn es auf einem anderen Unix ausgeführt wird.
</p><p>Eine gängige Strategie zum Schreiben von portablen Shell-Skripten ist es, sich nur auf den kleinsten gemeinsamen Nenner zu verlassen. Dies bedeutet in der Regel, dass man die Bourne-Shell verwendet und damit auf die bequemen Erweiterungen, wie sie zum Beispiel in der Korn-Shell oder bash zu finden sind, bewusst verzichtet. Je nachdem, wie groß die Bandbreite der abzudeckenden Systeme ist, verzichtet man auch auf die Benutzung neuerer, in POSIX standardisierter Bourne-Shell-Features.
</p>
<div class="mw-heading mw-heading2"><h2 id="Literatur">Literatur</h2></div>
<ul><li>Helmut Herold: <i>Linux-Unix-Shells, Bourne-Shell, Korn-Shell, C-Shell, bash, tcsh.</i> Addison-Wesley, München 2003, ISBN 3-8273-1511-5.</li>
<li>Alexander Mayer: <i>Shell-Skripte in Unix.</i> C&amp;L – Computer &amp; Literatur-Verlag, Böblingen 2005, ISBN 3-936546-23-1.</li>
<li>Morris I. Bolsky, David G. Korn: <i>The new Korn Shell Command and Programming Language.</i> 2. Auflage. Prentice Hall, Upper Saddle River 1995, ISBN 0-13-182700-6.</li>
<li>Arnold Robbins, Bill Rosenblatt: <i>Learning the Korn Shell, 2nd Edition.</i> O’Reilly, Beijing 2002, ISBN 0-596-00195-9.</li>
<li>Paul Dubois: <i>Using tcsh and csh.</i> O’Reilly, Beijing 1995. ISBN 1-56592-132-1</li>
<li>Patrick Ditchen: <i>Shell-Skript Programmierung.</i> 2. Auflage. mitp, Heidelberg 2006, ISBN 3-8266-1623-5.</li>
<li>Ellie Quigley: <i>UNIX Shells by Example, 4th Edition.</i> Prentice Hall PTR, Upper Saddle River 2005, ISBN 0-13-147572-X.</li>
<li>O. Kiddle, J. Peek, P. Stephenson: <i>From Bash to Z Shell.</i> Apress, New York 2004, ISBN 1-59059-376-6.</li>
<li>Jürgen Wolf: <i>Shell-Programmierung – Einführung, Praxis, Referenz.</i> Galileo Computing, Bonn 2005, ISBN 3-89842-683-1.</li>
<li>Sven Guckes, Julius Plenz: <i>Zsh – Die magische Shell.</i> Open Source Press, München 2008, ISBN 3-937514-59-7.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<div class="sisterproject" style="margin:0.1em 0 0 0;"><div class="noresize noviewer" style="display:inline-block; line-height:10px; min-width:1.6em; text-align:center;" aria-hidden="true" role="presentation"><span class="mw-default-size" typeof="mw:File"><span title="Commons"></span></span></div><b><span class=""><a class="external text" href="https://commons.wikimedia.org/wiki/Category:Unix_shells?uselang=de"><span lang="en">Commons</span>: Unix-Shell</a></span></b>&nbsp;– Sammlung von Bildern, Videos und Audiodateien</div>
<div class="sisterproject" style="margin:0.1em 0 0 0;"><div class="noviewer" style="display:inline-block; line-height:10px; min-width:1.6em; text-align:center;" aria-hidden="true" role="presentation"><span class="mw-default-size" typeof="mw:File"><span title="Wikibooks"></span></span></div><b><a href="https://de.wikibooks.org/wiki/Linux-Praxisbuch/_Shellprogrammierung" class="extiw external" title="b:Linux-Praxisbuch/ Shellprogrammierung">Wikibooks: Linux-Praxisbuch: Shellprogrammierung</a></b>&nbsp;– Lern- und Lehrmaterialien</div>
<ul><li><span class="cite"><a rel="nofollow" class="external text" href="https://swcarpentry.github.io/shell-novice/aio.html"><i>The Unix Shell.</i></a> In: <i>swcarpentry.github.io.</i><span class="Abrufdatum" style="display:none"> Abgerufen am 8.&nbsp;Februar 2024</span> (englisch, umfangreiche Einführung).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AUnix-Shell&amp;rft.title=The+Unix+Shell&amp;rft.description=The+Unix+Shell&amp;rft.identifier=https%3A%2F%2Fswcarpentry.github.io%2Fshell-novice%2Faio.html&amp;rft.language=en">&nbsp;</span></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text">Thomas Kessel: <cite style="font-style:italic">Einführung in Linux – Ein praxisorientiertes Lehrbuch</cite>. Oldenbourg Wissenschaftsverlag München, 2007, ISBN 978-3-486-58368-7, <span style="white-space:nowrap">S.<span style="display:inline-block;width:.2em">&nbsp;</span>125</span> (<a rel="nofollow" class="external text" href="https://books.google.de/books?id=uog_CgAAQBAJ&amp;pg=PA125&amp;q=Kommandozeileninterpreter#v=onepage">eingeschränkte Vorschau</a> in der Google-Buchsuche): „Der Kommandozeileninterpreter (engl. shell) ist die Schnittstelle, um mit dem Betriebssystem zu kommunizieren. Unter Linux hat sich <i>bash (bourne again shell)</i> als die Standard-shell durchgesetzt, unter UNIX hingegen gibt es eine Vielzahl von shells, z.&nbsp;B. C-shell, Korn-shell, Bourne-shell, die jeweils über unterschiedliche Syntax und Funktionen verfügen.“<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Unix-Shell&amp;rft.au=Thomas+Kessel&amp;rft.btitle=Einf%C3%BChrung+in+Linux+-+Ein+praxisorientiertes+Lehrbuch&amp;rft.date=2007&amp;rft.genre=book&amp;rft.isbn=9783486583687&amp;rft.pages=125&amp;rft.pub=Oldenbourg+Wissenschaftsverlag+M%C3%BCnchen" style="display:none">&nbsp;</span></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text">Michael Urban, Brian Tiemann: <cite style="font-style:italic">Sams teach yourself FreeBSD in 24 hours</cite>. Sams Publishing, 2002, ISBN 978-0-672-32424-6, <span style="white-space:nowrap">S.<span style="display:inline-block;width:.2em">&nbsp;</span>56</span> (<a rel="nofollow" class="external text" href="https://books.google.de/books?id=LyDP5b2xzaMC&amp;pg=PA56#v=onepage">eingeschränkte Vorschau</a> in der Google-Buchsuche).<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Unix-Shell&amp;rft.au=Michael+Urban%2C+Brian+Tiemann&amp;rft.btitle=Sams+teach+yourself+FreeBSD+in+24+hours&amp;rft.date=2002&amp;rft.genre=book&amp;rft.isbn=9780672324246&amp;rft.pages=56&amp;rft.pub=Sams+Publishing" style="display:none">&nbsp;</span></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://www.ibm.com/docs/en/aix/7.3?topic=shells-bourne-shell"><i>Bourne shell.</i></a> In: <i>Documentation, AIX 7.3.</i> IBM, 24.&nbsp;März 2023,<span class="Abrufdatum"> abgerufen am 9.&nbsp;November 2024</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AUnix-Shell&amp;rft.title=Bourne+shell&amp;rft.description=Bourne+shell&amp;rft.identifier=https%3A%2F%2Fwww.ibm.com%2Fdocs%2Fen%2Faix%2F7.3%3Ftopic%3Dshells-bourne-shell&amp;rft.publisher=IBM&amp;rft.date=2023-03-24">&nbsp;</span> <i>Bourne shell commands</i>&gt;<i>Reserved words</i>: Eintrag <i>if...</i>; <i>List of Bourne shell built-in commands</i>: Einträge <i>test</i> und <i>echo</i>.</span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><a href="#cite_ref-4">↑</a></span> <span class="reference-text"><span class="cite">dash-Projekt: <a rel="nofollow" class="external text" href="https://man7.org/linux/man-pages/man1/dash.1.html#DESCRIPTION"><i>dash - Linux manual page.</i></a> In: <i>Linux man pages online.</i> Michael Kerrisk, 8.&nbsp;Juni 2024,<span class="Abrufdatum"> abgerufen am 7.&nbsp;November 2024</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AUnix-Shell&amp;rft.title=dash+-+Linux+manual+page&amp;rft.description=dash+-+Linux+manual+page&amp;rft.identifier=https%3A%2F%2Fman7.org%2Flinux%2Fman-pages%2Fman1%2Fdash.1.html%23DESCRIPTION&amp;rft.creator=dash-Projekt&amp;rft.publisher=Michael+Kerrisk&amp;rft.date=2024-06-08">&nbsp;</span> Abschnitt <i>Flow-Control Constructs - if, while, for, case</i>, Befehl <i>if</i>; Abschnitt <i>Builtins</i>, Befehle <i>test</i> und <i>echo</i>.</span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><a href="#cite_ref-5">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://pubs.opengroup.org/onlinepubs/9695969399/toc.pdf">X/Open CAE Specification (1994), Commands and Utilities Issue 4, Version 2 (IEEE Std 1003.2-1992)</a> Seite 26</span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><a href="#cite_ref-6">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.gnu.org/software/bash/">bash</a> gnu.org</span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><a href="#cite_ref-7">↑</a></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r261891140">
/* start https://de.wikipedia.org/ */


.mw-parser-output .webarchiv-memento a{color:inherit}


/* end https://de.wikipedia.org/ */
</style><a rel="nofollow" class="external text" href="https://web.archive.org/web/20090120064207/http://gd.tuwien.ac.at/linuxcommand.org/man_pages/nash8.html">nash-Manpage</a> (<span class="webarchiv-memento"><a href="Webarchivierung#Begrifflichkeiten" title="Webarchivierung">Memento</a></span> vom 20. Januar 2009 im <i><a href="Internet_Archive" title="Internet Archive">Internet Archive</a></i>)</span>
</li>
<li id="cite_note-8"><span class="mw-cite-backlink"><a href="#cite_ref-8">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://sourceforge.net/projects/psh/">psh2</a></span>
</li>
<li id="cite_note-9"><span class="mw-cite-backlink"><a href="#cite_ref-9">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://ipython.org/ipython-doc/3/interactive/shell.html"><i>IPython as a system shell.</i></a><span class="Abrufdatum"> Abgerufen am 23.&nbsp;Februar 2018</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AUnix-Shell&amp;rft.title=IPython+as+a+system+shell&amp;rft.description=IPython+as+a+system+shell&amp;rft.identifier=https%3A%2F%2Fipython.org%2Fipython-doc%2F3%2Finteractive%2Fshell.html&amp;rft.language=en">&nbsp;</span></span>
</li>
</ol></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2025-10-27" href="https://de.wikipedia.org/wiki/?title=Unix-Shell&amp;oldid=260997171">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>